//package cn.lingyangwl.agile.auth.oauth2.service;
//
//import cn.lingyangwl.agile.model.constants.SecurityCons;
//import lombok.RequiredArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.security.authentication.ProviderManager;
//import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
//import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
//import org.springframework.security.core.userdetails.UserDetails;
//import org.springframework.security.core.userdetails.UserDetailsService;
//import org.springframework.security.core.userdetails.UsernameNotFoundException;
//import org.springframework.stereotype.Service;
//
///**
// * 这是一个空的用户信息获取类, 为什么会有这个类?
// * 由于我们自定义了 DaoAuthenticationProvider 类, 如果只有一个 {@link UserDetailsService} 实现类
// * 则会将 {@link DaoAuthenticationProvider} 添加到 {@link AuthenticationManagerBuilder} 中, 导致
// * 我们自定义的 DaoAuthenticationProvider 中如果抛出了异常, 依旧会执行 {@link DaoAuthenticationProvider}, 那么我们
// * 抛出的异常将无效, 因为 {@link DaoAuthenticationProvider} 在授权时候也会抛出一个异常覆盖我们自己的异常
// * {@link ProviderManager}
// *
// * 当前这个类没有业务上的意义, 当然了, 你可以根据你自己的业务实现不同的 {@link UserDetailsService} 实现类,
// * 比如 PhoneUserDetailsService(手机号登录获取用户信息) UsernameUserDetailsService(用户名登录),
// * EmailUserDetailsService(邮箱登录) 等等类, 这里 {@link MyUserDetailsServiceImpl} 类兼容了通过手机号, 邮箱, 用户名
// * 获取用户信息功能, 所以为了避免上述问题, 这里又定义了一个空实现
// *
// * @author shenguangyang
// */
//@Slf4j
//@Service
//@RequiredArgsConstructor
//public class MyNullUserDetailsServiceImpl implements MyUserDetailsService {
//
//    @Override
//    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
//        return null;
//    }
//
//    /**
//     * 是否支持此客户端校验
//     * @param clientId 目标客户端
//     * @return true/false
//     */
//    @Override
//    public boolean support(String clientId, String grantType) {
//        return SecurityCons.NOT_EXIST.equals(grantType);
//    }
//}
